ডাইনামিক মেমোরি বরাদ্দ C++ এ এমন একটি পদ্ধতি যার মাধ্যমে প্রোগ্রাম রানটাইমে (program runtime) প্রয়োজন অনুযায়ী মেমোরি বরাদ্দ করতে পারে এবং কাজ শেষে মেমোরি মুক্ত করতে পারে। C++ এ ডাইনামিক মেমোরি বরাদ্দের জন্য new
এবং delete
কীওয়ার্ড ব্যবহার করা হয়।
ডাইনামিক মেমোরি বরাদ্দের প্রধান সুবিধা হলো এটি প্রোগ্রামের মেমোরি ব্যবস্থাপনায় উন্নতি করে এবং প্রোগ্রামকে আরও কার্যকর করে তোলে। উদাহরণস্বরূপ:
new
কীওয়ার্ডnew
কীওয়ার্ড ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ করা হয়। এটি মেমোরির একটি ব্লক বরাদ্দ করে এবং তার ঠিকানা রিটার্ন করে।
new
কীওয়ার্ড ব্যবহার করে একক মেমোরি বরাদ্দ#include <iostream>
using namespace std;
int main() {
int *ptr = new int; // একটি ইন্টিজার মেমোরি বরাদ্দ
*ptr = 10; // মান সেট করা
cout << "Value: " << *ptr << endl; // Output: Value: 10
delete ptr; // মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new int
একটি ইন্টিজারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করে এবং সেই মেমোরির ঠিকানা ptr
পয়েন্টারে সংরক্ষণ করা হয়।*ptr = 10;
দিয়ে ptr
দ্বারা নির্দেশিত মেমোরি লোকেশনে মান ১০ সেট করা হয়েছে।delete ptr;
ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।new
কীওয়ার্ড ব্যবহার করে অ্যারে বরাদ্দ#include <iostream>
using namespace std;
int main() {
int size = 5;
int *arr = new int[size]; // একটি অ্যারের জন্য ডাইনামিক মেমোরি বরাদ্দ
// অ্যারে ইনিশিয়ালাইজ করা
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// অ্যারের মান প্রিন্ট করা
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr; // অ্যারের মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new int[size]
ব্যবহার করে ৫টি ইন্টিজার ধারণ করতে সক্ষম একটি অ্যারে বরাদ্দ করা হয়েছে।delete[] arr;
দিয়ে পুরো অ্যারের মেমোরি মুক্ত করা হয়েছে।delete
কীওয়ার্ডdelete
কীওয়ার্ড মেমোরি মুক্ত করার জন্য ব্যবহৃত হয়, যা আগে new
দ্বারা বরাদ্দকৃত মেমোরি রিলিজ করে। delete
মেমোরি লিক প্রতিরোধে সহায়ক, কারণ এটি অব্যবহৃত মেমোরি মুক্ত করে।
delete
ব্যবহার করতে হয়।delete[]
ব্যবহার করতে হয়।delete
না করলে মেমোরি লিক হতে পারে। তাই ব্যবহারের পর মেমোরি অবশ্যই মুক্ত করতে হবে।delete
করার পরও পয়েন্টারের মান রয়ে গেলে এটি ড্যাংলিং পয়েন্টার তৈরি করতে পারে। তাই delete
করার পর পয়েন্টারকে NULL
বা nullptr
করতে হবে।delete
এবং delete[]
এর ব্যবহার: অ্যারে মেমোরি মুক্ত করার জন্য delete[]
ব্যবহার করতে হবে, না হলে সমস্যার সৃষ্টি হতে পারে।#include <iostream>
using namespace std;
int main() {
int *ptr = new int(10); // মেমোরি বরাদ্দ
cout << "Value: " << *ptr << endl;
delete ptr; // মেমোরি মুক্ত
ptr = nullptr; // ড্যাংলিং পয়েন্টার প্রতিরোধ
return 0;
}
বর্ণনা:
delete ptr;
দিয়ে মেমোরি মুক্ত করার পর, ptr = nullptr;
করে পয়েন্টারকে nullptr
এ সেট করা হয়েছে, যাতে ড্যাংলিং পয়েন্টার সমস্যা প্রতিরোধ হয়।#include <iostream>
using namespace std;
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
// ডাইনামিক্যালি অ্যারের জন্য মেমোরি বরাদ্দ
float *data = new float[n];
cout << "Enter elements: ";
for (int i = 0; i < n; i++) {
cin >> data[i];
}
cout << "You entered: ";
for (int i = 0; i < n; i++) {
cout << data[i] << " ";
}
cout << endl;
delete[] data; // অ্যারের মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new
ব্যবহার করে অ্যারের জন্য মেমোরি বরাদ্দ করা হয়েছে।delete[] data;
দিয়ে অ্যারের মেমোরি মুক্ত করা হয়েছে।new
এবং delete
এর সুবিধাnew
এবং delete
ব্যবহার করে লিংকড লিস্ট, স্ট্যাক, কিউ প্রভৃতি ডায়নামিক ডেটা স্ট্রাকচার তৈরি করা সহজ।new
এবং delete
এর অসুবিধাdelete
করার পর পয়েন্টার ব্যবহার করলে সমস্যা হতে পারে।delete[]
এবং একক ভ্যারিয়েবলের জন্য delete
ব্যবহার করতে হয়, যা সঠিকভাবে ব্যবহার না করলে সমস্যার কারণ হতে পারে।new
কীওয়ার্ড দিয়ে ডাইনামিক মেমোরি বরাদ্দ করা হয়।delete
কীওয়ার্ড দিয়ে ডাইনামিক মেমোরি মুক্ত করা হয়।new
এবং delete
ব্যবহার করে C++ প্রোগ্রামাররা প্রয়োজনমতো মেমোরি বরাদ্দ ও মুক্ত করে দক্ষতার সাথে মেমোরি ম্যানেজমেন্ট করতে পারেন।
common.read_more